﻿using System;
using System.Collections.Generic;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.KDT.SXXK;
using Company.BLL.DuLieuChuan;
using Janus.Windows.GridEX;
using Company.BLL.KDT;

namespace Company.Interface.KDT.SXXK
{
    public partial class NguyenPhuLieuSendForm : BaseForm
    {
        private readonly NguyenPhuLieuDangKy nplDangKy = new NguyenPhuLieuDangKy();

        //-----------------------------------------------------------------------------------------
        public NguyenPhuLieuSendForm()
        {
            InitializeComponent();
        }

        #region Private methods.

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo dữ liệu chuẩn.
        /// </summary>
        private void khoitao_DuLieuChuan()
        {
            this._DonViTinh = DonViTinh.SelectAll();
        }

        //-----------------------------------------------------------------------------------------
        private void NguyenPhuLieuSendForm_Load(object sender, EventArgs e)
        {
            this.khoitao_DuLieuChuan();
            donViHaiQuanControl1.Ma= GlobalSettings.MA_HAI_QUAN;
            dgList.DataSource = this.nplDangKy.NPLCollection;
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;
                if (this.nplDangKy.NPLCollection.Count == 0)
                {
                    ShowMessage("Danh sách nguyên phụ liệu rỗng.\nKhông thể thực hiện khai báo thông tin đến Hải quan.", false);
                    return;
                }
                // Master.
                this.nplDangKy.MaHaiQuan = donViHaiQuanControl1.Ma;
                this.nplDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                this.nplDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;

                // Thực hiện gửi thông tin.
                string[] danhsachDaDangKy = new string[0];

                WSForm wsForm = new WSForm();
                wsForm.ShowDialog(this);
                if (!wsForm.IsReady) return;
                this.Cursor = Cursors.WaitCursor;
                this.nplDangKy.WSSend(ref danhsachDaDangKy);
                this.Cursor = Cursors.Default;
                // Thực hiện kiểm tra.
                if (this.nplDangKy.SoTiepNhan == 0)
                {
                    this.updateRowsOnGrid(danhsachDaDangKy);
                    ShowMessage("Đăng ký không thành công!\nCó một số nguyên phụ liệu đã được đăng ký rồi (các dòng màu đỏ).\nVui lòng kiểm tra lại!", false);
                }
                else
                {
                    txtSoTiepNhan.Text = this.nplDangKy.SoTiepNhan.ToString();
                    lblTrangThai.Text = "Chờ duyệt chính thức";
                    cmdSend.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdSave.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdAdd.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdAddExcel.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    dgList.AllowDelete = Janus.Windows.GridEX.InheritableBoolean.False;
                    ShowMessage("Đăng ký thành công!\nSố tiếp nhận đăng ký điện tử: " + this.nplDangKy.SoTiepNhan, false);
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if(ex.Message.IndexOf("123DaDuyet321")>=0)
                {
                    ShowMessage("Danh sách này đã duyệt rồi ", false);
                    return;
                }
                if (ShowMessage("Khai báo không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn lưu thông tin và đưa vào hàng đợi không?", true) == "Yes")
                {
                    this.nplDangKy.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                    this.nplDangKy.NgayTiepNhan = new DateTime(1900, 1, 1);
                    int sttHang = 1;
                    foreach (NguyenPhuLieu nplD in this.nplDangKy.NPLCollection)
                    {
                        nplD.STTHang = sttHang++;
                    }
                    this.nplDangKy.InsertUpdateFull();
                    HangDoi hd = new HangDoi();
                    hd.ID = this.nplDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DANH_MUC_NGUYEN_PHU_LIEU;
                    hd.TrangThai = this.nplDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
                
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Thêm mới nguyên phụ liệu.
        /// </summary>
        private void add()
        {
            NguyenPhuLieuEditForm f = new NguyenPhuLieuEditForm();
            f.OpenType = OpenFormType.Insert;
            f.MaHaiQuan = donViHaiQuanControl1.Ma;
            f.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            f.NPLCollection = nplDangKy.NPLCollection;
            f.nplDangKy = nplDangKy;
            f.ShowDialog();

            if (f.NPLDetail != null)
            {
                this.nplDangKy.NPLCollection.Add(f.NPLDetail);
                dgList.Refetch();
            }
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Lưu thông tin.
        /// </summary>
        private void save()
        {
            try
            {
               

                if (this.nplDangKy.NPLCollection.Count == 0)
                {
                    ShowMessage("Danh sách nguyên phụ liệu rỗng.\nKhông thể cập nhật dữ liệu.", false);
                    return;
                }
                this.Cursor = Cursors.WaitCursor;
                // Master.
                this.nplDangKy.MaHaiQuan = donViHaiQuanControl1.Ma;
                if (this.nplDangKy.ID == 0)
                {
                    this.nplDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;
                    this.nplDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                    this.nplDangKy.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                    this.nplDangKy.NgayTiepNhan = new DateTime(1900,1,1);
                }
                // Detail.
                int sttHang = 1;
                foreach (NguyenPhuLieu nplD in this.nplDangKy.NPLCollection)
                {
                    nplD.STTHang = sttHang++;
                }

                if (this.nplDangKy.InsertUpdateFull())
                {
                    this.Cursor = Cursors.Default;
                    ShowMessage("Cập nhật thành công!", false);
                }
                else
                {
                    this.Cursor = Cursors.Default;
                    ShowMessage("Cập nhật không thành công!", false);
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                MessageBox.Show("Có lỗi:" + ex.Message);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }


        //-----------------------------------------------------------------------------------------
        private void updateRowOnGrid(string maNPL)
        {
            GridEXRow[] jrows = dgList.GetRows();
            foreach (GridEXRow row in jrows)
            {
                if (row.Cells["Ma"].Value.ToString().Equals(maNPL))
                {
                    row.BeginEdit();
                    row.Cells["IsExistOnServer"].Value = 1;
                    row.EndEdit();
                    break;
                }
            }

        }

        //-----------------------------------------------------------------------------------------
        private void updateRowsOnGrid(IEnumerable<string> collection)
        {
            GridEXRow[] jrows = dgList.GetRows();
            foreach (GridEXRow row in jrows)
            {
                row.BeginEdit();
                row.Cells["IsExistOnServer"].Value = 0;
                row.EndEdit();
            }

            foreach (string s in collection)
            {
                this.updateRowOnGrid(s);
            }
        }

        #endregion

        
        //-----------------------------------------------------------------------------------------
        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                e.Row.Cells["DVT_Ten"].Text = this.DonViTinh_GetName(e.Row.Cells["DVT_ID"].Value.ToString());
            }
        }

        //-----------------------------------------------------------------------------------------
        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            if (txtSoTiepNhan.Text.Trim().Length == 0)
            {
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    if (i.RowType == RowType.Record)
                    {
                        NguyenPhuLieuEditForm f = new NguyenPhuLieuEditForm();
                        f.MaHaiQuan = donViHaiQuanControl1.Ma;
                        f.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                        f.NPLDetail = this.nplDangKy.NPLCollection[i.Position];
                        f.OpenType = OpenFormType.Edit;
                        f.NPLCollection = this.nplDangKy.NPLCollection;
                        f.NPLCollection.RemoveAt(i.Position);
                        f.nplDangKy = nplDangKy;
                        f.ShowDialog();

                        // Chưa lưu.
                        if (this.nplDangKy.ID == 0) 
                        {
                            if (f.NPLDetail != null)
                            {
                                this.nplDangKy.NPLCollection.Insert(i.Position,f.NPLDetail);
                            }
                        }
                        else
                        {
                            this.nplDangKy.LoadNPLCollection();
                            dgList.DataSource = this.nplDangKy.NPLCollection;
                        }
                        dgList.Refetch();
                    }
                    break;
                }
            }
        }

        //-----------------------------------------------------------------------------------------
        private void cmMain_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "cmdSave":
                    this.save();
                    break;
                case "cmdAdd":
                    this.add();
                    break;
                case "cmdSend":                    
                    this.send();
                    break;
                case "cmdAddExcel":
                    this.AddNguyenPhuLieuFromExcel();
                    break;
            }
        }
        private void AddNguyenPhuLieuFromExcel()
        {
            NguyenPhuLieuReadExcelForm f = new NguyenPhuLieuReadExcelForm();
            f.NPLCollection = this.nplDangKy.NPLCollection;
            f.ShowDialog();
            dgList.DataSource = this.nplDangKy.NPLCollection;
            dgList.Refetch();
        }
        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                if (ShowMessage("Bạn có muốn xóa nguyên phụ liệu này không?", true) == "Yes")
                {
                    NguyenPhuLieu nplSelected = new NguyenPhuLieu();
                    nplSelected.ID = Convert.ToInt32(e.Row.Cells["ID"].Value);
                    nplSelected.Ma = e.Row.Cells["Ma"].Value.ToString();
                    
                    // Thực hiện xóa trong CSDL.
                    if (this.nplDangKy.ID > 0)
                    {
                        nplSelected.Delete();
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void dgList_DeletingRecords(object sender, System.ComponentModel.CancelEventArgs e)
        {            
            {
                if (ShowMessage("Bạn có muốn xóa nguyên phụ liệu này không?", true) == "Yes")
                {
                    GridEXSelectedItemCollection items = dgList.SelectedItems;
                    foreach (GridEXSelectedItem i in items)
                    {
                        if (i.RowType == RowType.Record)
                        {
                            NguyenPhuLieu nplSelected = (NguyenPhuLieu)i.GetRow().DataRow;                                                        
                            // Thực hiện xóa trong CSDL.
                            if (nplSelected.ID > 0)
                            {
                                nplSelected.Delete();
                            }
                        }
                    }                    
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }
    }
}